package com.atguigu;

/**
 * 八皇后问题
 *
 * @author dataexa
 * @Date 2023/12/27
 */
public class Queen8 {
    private static final int MAX = 8;
    // arr的下标代表第几行，值为第几列
    private static int[] arr = new int[MAX];
    private static int count = 0;

    public static void main(String[] args) {
        check(0);
        System.out.println(count);
    }

    /**
     * 放置第n个皇后的位置
     *
     * @param n
     */
    private static void check(int n) {
        if (n == MAX) {
            count++;
            printArr();
            return;
        }
        for (int i = 0; i < MAX; i++) {
            arr[n] = i;
            if (judge(n)) {
                check(n + 1);
            }
        }
    }

    /**
     * 打印数据
     */
    private static void printArr() {
        for (int i = 0; i < MAX; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    /**
     * 判断皇后摆放的位置是否符合要求
     *
     * @param n 当前摆放皇后的位置
     * @return
     */
    private static boolean judge(int n) {
        for (int i = 0; i < n; i++) {
            // 判断是否在同一列或者对角线上
            if (arr[i] == arr[n] || Math.abs(n - i) == Math.abs(arr[n] - arr[i])) {
                return false;
            }
        }
        return true;
    }
}
